// 将数组数据转换成树数据，根据parentId生成树结构，子元素放在children中
export const arrayToTree = (array: IListItem[]) => {
    // 创建 id 到项的映射
    const map = new Map<string, IListItem>()
    const roots: IListItem[] = []

    // 第一遍遍历，建立映射
    array.forEach((item) => {
        // 为每个项创建副本
        if (item.type === 'group') {
            map.set(item.id, { ...item, children: [] })
        } else {
            map.set(item.id, { ...item })
        }
    })

    // 第二遍遍历，建立父子关系
    array.forEach((item) => {
        const node = map.get(item.id)!

        if (item.parentId) {
            // 有父节点，找到父节点并添加到其 children 中
            const parent = map.get(item.parentId)
            if (parent && parent.type === 'group') {
                if (!parent.children) {
                    parent.children = []
                }
                parent.children.push(node)
            } else {
                // 找不到父节点，作为根节点
                roots.push(node)
            }
        } else {
            // 没有 parentId，作为根节点
            roots.push(node)
        }
    })

    return roots
}